Q20.CryptoBlock Cipher
与えられたC言語のソースコードを読み解いて復号してフラグを手にれましょう。
暗号文:cpaw{ruoYced_ehpigniriks_i_llrg_stae}
うっ…Cやったことないのでちょっときついですね。
とりあえず、与えられたコードを見やすく整形したものが以下になります。
code:crypto100.c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main(int argc, char *argv[])
{
int i;
int j;
int key = atoi(argv2);
const char *flag = argv1;
printf("cpaw{");
for (i = key - 1; i <= strlen(flag); i += key)
for (j = i; j >= i - key + 1; j--)
printf("%c", flagj);
printf("}");
return 0;
}
一つ目の引数に暗号文ruoYced_ehpigniriks_i_llrg_staeを与えて、2つ目の引数に与えた数値の数だけその文字列を並び替えるとかそういう処理をしていると見ました。
よくわからないのですがとりあえずコンパイルしていくつか実行してみます。
code:sh
~/c$ make crypto100
cc crypto100.c -o crypto100
~/c$ ./crypto100
Segmentation fault (core dumped)
~/c$ ./crypto100 ruoYced_ehpigniriks_i_llrg_stae 1
cpaw{ruoYced_ehpigniriks_i_llrg_stae }
~/c$ ./crypto100 ruoYced_ehpigniriks_i_llrg_stae 2
cpaw{urYoec_dheipngriki_s_illgrs_at e}
~/c$ ./crypto100 ruoYced_ehpigniriks_i_llrg_stae 3
cpaw{ourecYe_diphingkiri_sll__grats}
~/c$ ./crypto100 ruoYced_ehpigniriks_i_llrg_stae 4
cpaw{Your_deciphering_skill_is_gr eat}
それっぽい値が出てきました!なぜか一つ空白が入り込んでいるのでそれはとってやる必要があります。
#CpawCTF #crypt-ppc